Skip to content

feat: stato 'chiusa per gelatino' su doppio click - #15

Merged
michelangelomo merged 1 commit into
mainfrom
feat/chiusa-per-gelatino
Jun 1, 2026
Merged

feat: stato 'chiusa per gelatino' su doppio click#15
michelangelomo merged 1 commit into
mainfrom
feat/chiusa-per-gelatino

Conversation

@consocio

@consocio consocio commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Cosa

Aggiunge lo stato "chiusa per gelatino" innescato da un doppio click veloce sul pulsante fisico.

Hardware (pulsante-sede.yaml)

  • on_press sostituito da on_multi_click con due timing pattern.
  • Click singolo: toggle standard invariato.
  • Doppio click veloce: POST /toggle con reason: "gelatino", LED azzurro (R 0% / G 50% / B 100%).

Backend

  • SedeStatus.Reason: nuova colonna stringa. Migrata automaticamente via AutoMigrate.
  • ToggleStatusRequest.reason opzionale (json:"reason,omitempty"). Quando reason="gelatino" la toggle è idempotente sulla chiusura (forza IsOpen=false invece di flippare) — il doppio click chiude sempre, anche se la sede è già chiusa.
  • Telegram: messaggio dedicato 🍦 "sede chiusa per gelatino".
  • spaceapi.json: state.message segnala "Chiusa per gelatino 🍦" quando la chiusura corrente ha reason=gelatino.

Retro-compatibilità

  • Client senza reason (ESP32 vecchio firmware, MCP server, integrazioni terze) seguono il vecchio percorso toggle.
  • /status continua a restituire true/false testuale.
  • I due deploy (backend / firmware) sono indipendenti e l'ordine non conta.

Test

go test ./... da eseguire localmente — sandbox senza toolchain Go.

Hardware (pulsante ESP32):
- on_press sostituito da on_multi_click con due timing pattern
- click singolo: toggle standard invariato
- doppio click veloce: POST /toggle con reason='gelatino', LED azzurro
  (R 0% / G 50% / B 100%)

Backend:
- SedeStatus.Reason: nuova colonna stringa per tracciare la causa
  della chiusura (vuota = toggle normale, 'gelatino' = chiusura
  forzata per gelato). Migrata automaticamente via AutoMigrate.
- ToggleStatusRequest accetta 'reason' opzionale (json omitempty).
  Quando reason='gelatino' la toggle e' idempotente sulla chiusura
  (forza IsOpen=false invece di flippare) cosi' il doppio-click
  chiude sempre, anche se la sede e' gia' chiusa.
- Telegram: messaggio dedicato con emoji gelato per le chiusure
  gelatino.
- spaceapi.json: state.message segnala 'Chiusa per gelatino' quando
  la chiusura corrente ha reason=gelatino.

Retro-compatibile: client che non inviano 'reason' (ESP32 vecchio
firmware, MCP server, integrazioni terze) seguono il vecchio percorso
toggle. /status continua a restituire true/false testuale.
@codecov

codecov Bot commented Jun 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 50.00000% with 7 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
backend/internal/app/handlers.go 50.00% 5 Missing and 2 partials ⚠️
Files with missing lines Coverage Δ
backend/internal/database/database.go 86.82% <ø> (-0.87%) ⬇️
backend/internal/app/handlers.go 55.73% <50.00%> (-8.17%) ⬇️

... and 1 file with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@michelangelomo
michelangelomo merged commit b559a0f into main Jun 1, 2026
1 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants